import json


def extract_person_info_for_gbglqx(text: str):
    """
    提取JSON中的职级、职务、单位或地址，用于拼装干部管理权限的用户提示词

    Args:
        text: 被反映人信息的JSON字符串

    Returns:
        dict: 包含格式化字符串列表的结果
    """
    data = json.loads(text)
    res = []
    for item in data:
        formatted_str = "被反映人的职级：{zj},被反映人的职务：{zw}，被反映人的单位或地址：{dwhdz}".format(
            zw=item["zw"], zj=item["zj"], dwhdz=item["dwhdz"]
        )
        res.append(formatted_str)
    return {"result": res}


def assemble_gbglqx_result(text: str, gbglqx: list):
    """
    拼装干部管理权限到被反映人JSON中

    Args:
        text: 原始被反映人信息的JSON字符串
        gbglqx: 干部管理权限列表

    Returns:
        dict: 包含拼装后JSON字符串的结果
    """
    data = json.loads(text)
    if len(gbglqx) != len(data):
        raise ValueError("被反映人和LLM输出的干部管理权限的长度不一致")

    for i in range(len(data)):
        if gbglqx[i] == "无干部管理权限":
            data[i]["gbglqx"] = ""
        else:
            data[i]["gbglqx"] = gbglqx[i]

    # 输出结果（保持原始JSON格式）
    output = json.dumps(data, ensure_ascii=False, indent=2)
    return {"result": output}


def extract_duplicate_check_letters(text: str) -> dict:
    """
    获取带判重的信访件信息

    该函数用于从信访件数据中提取需要进行判重检查的内容。
    优先提取 wtms（问题描述）字段，如果为空则提取 yjms（原件描述）字段。

    Args:
        text: 包含信访件信息的JSON字符串

    Returns:
        dict: 包含提取结果的字典，格式为 {"result": ["内容1", "内容2", ...]}

    Raises:
        json.JSONDecodeError: 当输入的JSON格式不正确时
        ValueError: 当数据结构不符合预期时
    """
    try:
        # 解析JSON数据
        data = json.loads(text)

        if not isinstance(data, list):
            raise ValueError("输入数据必须是列表格式")

        result_list = []

        for index, item in enumerate(data):
            if not isinstance(item, dict):
                print(f"警告：第{index}项不是字典格式，已跳过")
                continue

            wtxx = item.get("wtxx", {})
            if not isinstance(wtxx, dict):
                print(f"警告：第{index}项的wtxx字段不是字典格式，已跳过")
                continue

            # 优先提取wtms字段
            wtms = wtxx.get("wtms")
            if wtms and wtms.strip():  # 检查wtms是否存在且不为空
                result_list.append(wtms.strip())
            else:
                # wtms为空时，提取yjms字段
                yjms = wtxx.get("yjms")
                if yjms and yjms.strip():  # 检查yjms是否存在且不为空
                    result_list.append(yjms.strip())
                else:
                    print(f"警告：第{index}项的wtms和yjms字段都为空，已跳过")

        print(f"成功提取了 {len(result_list)} 个信访件内容用于判重检查")
        return {"result": result_list}

    except json.JSONDecodeError as e:
        print(f"JSON解析错误: {str(e)}")
        return {"result": [], "error": "JSON格式不正确"}
    except ValueError as e:
        print(f"数据格式错误: {str(e)}")
        return {"result": [], "error": str(e)}
    except Exception as e:
        print(f"处理过程中发生未知错误: {str(e)}")
        return {"result": [], "error": "未知错误"}


# 模块导出
__all__ = [
    "extract_person_info_for_gbglqx",
    "assemble_gbglqx_result",
    "extract_duplicate_check_letters",
    "main",
]
